let tools = {
  // 金额千分位逗号分割
  formatCurrency(str){
    let number = Number(str);
    return number.toFixed(2).replace(/\d{1,3}(?=(\d{3})+(\.\d*)?$)/g, '$&,');
  },
  /**
   * 验证手机号码
   */
  checkPhone(phone) {
  	var reg = /^1(3|4|5|6|7|8|9)\d{9}$/
  	if (reg.test(phone)) {
  		return true
  	} else {
  		return false
  	}
  },
  /**
   * 验证邮箱
   */
  isEmailAvailable(emailInput) {
  	var myreg = /^([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|\_|\.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/;
  	if (!myreg.test(emailInput)) {
  		return false;
  	} else {
  		return true;
  	}
  },
  calculateDistance(lat1, lon1, lat2, lon2) {
    const radians = Math.PI / 180;
    const R = 6371; // 地球半径，单位为千米
   
    const deltaLat = (lat2 - lat1) * radians;
    const deltaLon = (lon2 - lon1) * radians;
   
    lat1 = lat1 * radians;
    lat2 = lat2 * radians;
   
    const a = Math.sin(deltaLat / 2) * Math.sin(deltaLat / 2) +
              Math.cos(lat1) * Math.cos(lat2) *
              Math.sin(deltaLon / 2) * Math.sin(deltaLon / 2);
    const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));
    const distance = R * c;
   
    return distance;
  },
  // **
  // 加法函数， 用来得到精确的加法结果 **
  // 说明： javascript的加法结果会有误差， 在两个浮点数相加的时候会比较明显。 这个函数返回较为精确的加法结果。 **
  // 调用： accAdd(arg1, arg2) **
  // 返回值： arg1加上arg2的精确结果 **
  // /
  accAdd(arg1, arg2) {
    var r1, r2, m;

    try {
      r1 = arg1.toString().split(".")[1].length
    } catch (e) {
      r1 = 0
    }

    try {
      r2 = arg2.toString().split(".")[1].length
    } catch (e) {
      r2 = 0
    }

    m = Math.pow(10, Math.max(r1, r2))

    return (arg1 * m + arg2 * m) / m

  },
  //   /**
  //  ** 乘法函数，用来得到精确的乘法结果
  // ** 说明：javascript的乘法结果会有误差，在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
  // ** 调用：accMul(arg1,arg2)
  // ** 返回值：arg1乘以 arg2的精确结果
  accMul(arg1, arg2, digital = 2) {
    console.log("价格", arg1)
    console.log("数量", arg2)
    var m = 0;

    var s1 = arg1.toString();

    var s2 = arg2.toString();

    try {

      m += s1.split(".")[1].length;

    } catch (e) {
      /**/ }

    try {

      m += s2.split(".")[1].length;

    } catch (e) {
      /**/ }

    return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);

  },
  formatDate(t) {
    t = t || Date.now();
    let time = new Date(t);
    let str = time.getMonth() < 9 ? '0' + (time.getMonth() + 1) : time.getMonth() + 1;
    str += '-';
    str += time.getDate() < 10 ? '0' + time.getDate() : time.getDate();
    str += ' ';
    str += time.getHours();
    str += ':';
    str += time.getMinutes() < 10 ? '0' + time.getMinutes() : time.getMinutes();
    return str;
  },
    // 获取当前年月日
    getCurrentDate() {
      const now = new Date();
      const year = now.getFullYear();
      const month = now.getMonth() + 1; // 月份是从0开始的，所以需要加1
      const day = now.getDate();
  
      // 如果月份或日期小于10，则在前面添加一个'0'
      const normalize = (value) => value < 10 ? '0' + value : value;
  
      return `${year}-${normalize(month)}`;
    },
  // 时间戳转年月日时分秒
  formatTime(timestamp) {
    console.log("timestamp11", timestamp);
    const date = new Date(timestamp * 1000);
    console.log("时间11", date.toLocaleString());
    // #ifdef H5
    let str = String(date).replace("GMT+0800 (中国标准时间)", " ");
    // #endif
    // #ifdef APP-PLUS
    let str = String(date).replace("GMT+0800 (CST)", " ");
    // #endif
    console.log("格式化时间", str);
    // const month = ('0' + (date.getMonth() + 1)).slice(-2); // 月份是从0开始的
    // const day = ('0' + date.getDate()).slice(-2);
    // const hour = ('0' + date.getHours()).slice(-2);
    // const unit = hour<12?'AM':'PM';
    // const minutes = ('0' + date.getMinutes()).slice(-2);
    // return year+'-'+month+'-'+day+" "+hour+":"+minutes+" "+unit;
    return str;
  },
  // 防抖
  debounce(func, wait, immediate) {
    let timeout, args, context, timestamp, result

    const later = function() {
      // 据上一次触发时间间隔
      const last = +new Date() - timestamp

      // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
      if (last < wait && last > 0) {
        timeout = setTimeout(later, wait - last)
      } else {
        timeout = null
        // 如果设定为immediate===true，因为开始边界已经调用过了此处无需调用
        if (!immediate) {
          result = func.apply(context, args)
          if (!timeout) context = args = null
        }
      }
    }

    return function(...args) {
      context = this
      timestamp = +new Date()
      const callNow = immediate && !timeout
      // 如果延时不存在，重新设定延时
      if (!timeout) timeout = setTimeout(later, wait)
      if (callNow) {
        result = func.apply(context, args)
        context = args = null
      }

      return result
    }
  }
}

export default tools;